#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>
#include <QSettings>
#include <QFile>
#include <QDebug>
#include <QFileDialog>
#include <QMessageBox>
#include <QStandardItemModel>
#include <QDir>
#include "global.h"
#include <QCryptographicHash>
#include <QCloseEvent>
#include <QDir>
#include <QMap>
#include <QTimer>
#include <QDesktopWidget>
#include <QItemSelectionModel>
#include <QTime>
#include <QRandomGenerator>
#include <QPushButton>
#include <QGridLayout>
#include <QFileDialog>

QT_BEGIN_NAMESPACE
namespace Ui {
class MainWindow;
}
QT_END_NAMESPACE

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    MainWindow(QWidget *parent = nullptr);
    ~MainWindow();

private slots:
    //自定义信号部分
    void on_timerWatiTest_timeOut();//定时器m_timerWaitTest的超时响应槽函数
    void on_timerArchieve_timeOut();//定时器m_timerArchieve的超时响应槽函数
    void on_testFileGen();//当检测到考试文件生成后调用此槽函数
    void on_timerTestTime_timeOut();//更新当前考试时间
    void on_topicBtnClicked();//当点击题目按钮切换题目时调用这个函数


private slots:
    void on_btnSigUp_clicked();

    void on_btnOkSigUP_clicked();

    void on_btnCancelSigUp_clicked();

    void on_btnLogin_clicked();

    void on_actTopic_triggered();

    void on_btnAppendTopic_clicked();

    void on_btnCancelAP_clicked();

    void on_btnOkAP_clicked();

    void on_btnEditTopic_clicked();

    void on_btnDeleteTopic_clicked();

    void on_combGradeTopic_currentIndexChanged(int index);

    void on_btnFIndTopic_clicked();

    void on_actTest_triggered();

    void on_btnAppendTest_clicked();

    void on_btnCancelEdit_clicked();

    void on_btnOkEdit_clicked();

    void on_combTest_currentTextChanged(const QString &arg1);

    void on_bntSendTest_clicked();

    void on_achAchieve_triggered();

    void on_btnDeleteTest_clicked();

    void on_btnStart_clicked();

    void on_btnStopExan_clicked();

    void on_btnOkEnd_clicked();

    void on_btnGenFile_clicked();

private:
    Ui::MainWindow *ui;

    //自定义成员部分
    USER m_user;//用于存储用户实体
    QMap<QString,USER> m_userMap;//用于存储用户信息的图结构
    QMap<QString,TEST> m_testMap;//用户存储试卷信息的图结构
    QTimer m_timerWaitTest;//用于检查试卷文件是否生成
    QTimer m_timerArchieve;//用于更新成绩表的的定时器
    QTimer m_timerTestTime;//用于为考试定时
    QStandardItemModel m_topicModel;//题目数据模型
    QStandardItemModel m_testModel;//试卷数据模型
    QStandardItemModel m_archieveModel;//学生成绩数据模型
    TEST m_test;//试卷实体
    STUDENT_S m_student;//学生实体
    QTime m_tetsStartTime;//测试时间
    QMap<QString,EXAM> m_exam;//考试作答图
    EXAM *m_currentExam;//当前正在显示的题目

    //自定义函数部分
    void init();//程序初始化函数,程序启动前最先调用的自定义函数

protected:
    //自定义保护函数部分
    void closeEvent(QCloseEvent* e);//重写程序关闭函数,使程序关闭前先保存数据到文件

signals:
    //自定义信号部分
    void testFileGenerated();//当检测到考试文件生成时发送此信号
};
#endif // MAINWINDOW_H
